/******************************************************************************
 * Copyright (C) ShenZhen Powerdata Information Technology Co.,Ltd
 * All Rights Reserved.
 * 本软件为深圳市博安达信息技术股份有限公司开发研制。未经本公司正式书面同意，其他任何个人、团体不得使用、
 * 复制、修改或发布本软件.
 *****************************************************************************/

package com.szboanda.business.workflow.dao;

import com.szboanda.beijing.pure.BaseBusinessDAO;
import com.szboanda.business.workflow.exception.WorkflowException;
import com.szboanda.platform.common.annotation.AutoLoadDAO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @title: 流程处理意见_业务处理DAO接口类
 * @fileName: WorkflowDAO.java
 * @description:
 * @copyright: PowerData Software Co.,Ltd. Rights Reserved.
 * @company: 深圳市博安达信息技术股份有限公司
 * @author: 原晋川
 * @date: 2019-08-23 15:37
 * @version: V1.0
 */

@AutoLoadDAO
public interface WorkflowDAO extends BaseBusinessDAO {

    /**
     * 查询【流程处理意见】业务集合
     *
     * @param searchInfo 业务Map对象
     * @return 业务集合
     * @throws WorkflowException
     */
    List<Map<String, Object>> queryWorkflows(Map<String, Object> searchInfo) throws WorkflowException;

    Map<String, Object> queryCurrentStepByInstanceid(String params);

    Map<String, Object> queryFirstStepByInstanceid(String params);

    /**
     * 查询指定流程的当前步骤序号及流程对应的业务ID和业务表名
     *
     * @param params {
     *               LCBH,LCDYBH
     *               }
     * @return
     * @throws WorkflowException
     */
    Map<String, Object> queryCurrentStepAndBusinessTableByInstanceId(Map<String, Object> params) throws WorkflowException;

    /**
     * 删除指定表的指定数据
     *
     * @param params {
     *               TABLE,YWXTBH
     *               }
     * @return
     * @throws WorkflowException
     */
    int deleteBusinessDataByTableAndInstanceId(Map<String, Object> params) throws WorkflowException;

    /**
     * 查询指定用户是否关注指定流程
     *
     * @param userId
     * @param workflowId
     */
    boolean queryIsAttention(@Param("userId") String userId, @Param("workflowId") String workflowId);

    /**
     * 给工作流程实例表指定流程的关注用户字段追加用户
     *
     * @param userId     用户ID
     * @param workflowId 工作流程ID
     * @return
     */
    boolean setWorkflowAttention(@Param("userId") String userId, @Param("workflowId") String workflowId);

    /**
     * 给工作流程实例表指定流程的关注用户字段移除用户
     *
     * @param userId
     * @param workflowId
     * @return
     */
    boolean cancelWorkflowAttention(@Param("userId") String userId, @Param("workflowId") String workflowId);

    /**
     * 查询业务流程类型集合
     *
     * @return
     */
    List<Map<String, Object>> queryWorkflowType();

    /**
     * 查询意见类型集合
     *
     * @param searchInfo
     * @return
     * @throws WorkflowException
     */
    List<String> queryCopyReaders(Map<String, Object> searchInfo) throws WorkflowException;
}